package com.micro.ai.auth.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.micro.ai.auth.dto.RoleCreateRequest;
import com.micro.ai.auth.dto.RoleDTO;
import com.micro.ai.auth.dto.RoleUpdateRequest;

import java.util.List;

/**
 * 角色服务接口
 * 
 * @author micro-ai
 * @since 0.0.1
 */
public interface RoleService {

    /**
     * 创建角色
     */
    RoleDTO createRole(RoleCreateRequest request);

    /**
     * 更新角色
     */
    RoleDTO updateRole(String roleId, RoleUpdateRequest request);

    /**
     * 删除角色
     */
    void deleteRole(String roleId);

    /**
     * 根据ID获取角色
     */
    RoleDTO getRoleById(String roleId);

    /**
     * 根据编码获取角色
     */
    RoleDTO getRoleByCode(String code);

    /**
     * 分页查询角色
     */
    Page<RoleDTO> listRoles(int pageNum, int pageSize, String tenantId, String keyword, String status);

    /**
     * 获取所有角色（不分页）
     */
    List<RoleDTO> getAllRoles(String tenantId);

    /**
     * 为角色分配权限
     */
    void assignPermissions(String roleId, List<String> permissionIds);

    /**
     * 移除角色的权限
     */
    void removePermissions(String roleId, List<String> permissionIds);

    /**
     * 获取角色的所有权限（已废弃）
     * @deprecated 使用 getRoleMenuIds 代替
     */
    @Deprecated
    List<String> getRolePermissions(String roleId);

    /**
     * 获取用户的所有角色（包括继承的）
     */
    List<RoleDTO> getUserRoles(String userId);

    /**
     * 检查角色编码是否存在
     */
    boolean existsByCode(String code);
    
    /**
     * 为角色分配菜单权限
     * @param roleId 角色ID
     * @param menuIds 菜单ID列表
     */
    void assignMenus(String roleId, List<String> menuIds);
    
    /**
     * 移除角色的菜单权限
     * @param roleId 角色ID
     * @param menuIds 菜单ID列表
     */
    void removeMenus(String roleId, List<String> menuIds);
    
    /**
     * 获取角色的所有菜单ID
     * @param roleId 角色ID
     * @return 菜单ID列表
     */
    List<String> getRoleMenuIds(String roleId);
}

